package com.pine.dbant.common.plugin.meta;


import com.pine.dbant.common.model.ConnectionInfo;
import com.pine.dbant.common.store.CacheStore;
import com.pine.sunflower.core.plugin.Configuration;

import java.util.List;

/**
 * @author xiaoyuan
 * @create 2022/1/19 17:01
 **/
public interface MetadataAnalysisConfig {


    /**
     * 获取连接信息
     * @return
     */
    ConnectionInfo getConnectionInfo();

    /**
     * 获取配置信息
     * @return
     */
    Configuration getConfiguration();




    /**
     * 获取方法集合
     * @return
     */
    List<QueryMetadataFunction> getFunctions();


    /**
     * 设置当前连接信息
     *
     * @param connectionInfo
     * @return
     */
    MetadataAnalysisConfig connectionInfo(ConnectionInfo connectionInfo);

    /**
     * 设置当前连接信息
     *
     * @param configuration
     * @return
     */
    MetadataAnalysisConfig configuration(Configuration configuration);





    /**
     * 需要分析的表类型
     *
     * @param functions
     * @return
     */
    MetadataAnalysisConfig addFunction(List<QueryMetadataFunction> functions);


    /**
     * 需要分析的表类型
     *
     * @param function
     * @return
     */
    MetadataAnalysisConfig addFunction(QueryMetadataFunction function);

    /**
     * 获取某个方法的实现
     * @param type
     * @return
     */
    QueryMetadataFunction getFunction(String type);

    /**
     * 设置当前连接信息
     *
     * @param configuration
     * @return
     */
    MetadataAnalysisConfig cacheStore(CacheStore cacheStore);

    /**
     * 获取缓存对象
     * @return
     */
    CacheStore getCacheStore();
}
